import pickle  
import numpy as np    
import gradio as gr 
# TODO: 加载保存的KNN模型，这样我们可以使用预训练的模型进行预测
with open('best_knn_model.pkl','rb')as f:
    knn=pickle.load(f)
# TODO: 定义预测函数，这个函数将用于Gradio接口进行预测
def preprocess(image):
    image = image.resize((8, 8)).convert('L')
    image_array = np.array(image)
    flattened_image = image_array.ravel()
    return flattened_image

def predict(image):
    preprocessed_image = preprocess(image)
    predicted_digit = knn.predict([preprocessed_image])[0]
    return str(predicted_digit)
# TODO: 创建Gradio接口，这个接口将用于用户输入和显示预测结果

interface = gr.Interface(predict, 
                         inputs=gr.Sketchpad(label="Image", brush_radius=5, type="pil", shape=(120, 120)), 
                         outputs=gr.Label(label="Guess"), 
                         live=True)
# TODO: 启动Gradio接口，用户可以通过这个接口进行交互
interface.launch(share=True)